package demo1;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * Date: 2025-03-02
 * Time: 20:29
 */
public class demo1 {
    public static void main(String[] args) {
        //学会如何对顺序表进行遍历
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        System.out.println(list);
//        第五种：使用 ListIterator 迭代器进行输出，并从指定位置出发
        System.out.println("=====使用 ListIterator 迭代器循环打印，指定位置======");
        ListIterator<Integer> it2 = list.listIterator(list.size());
        while(it2.hasPrevious()) {
            System.out.print(it2.previous() + " ");// 5 4 3 2 1
        }
        System.out.println();
//        第四种：使用 ListIterator 迭代器进行输出
        System.out.println("=====使用 ListIterator 迭代器循环打印======");
        ListIterator<Integer> it1 = list.listIterator();
        while(it1.hasNext()) {
            System.out.print(it1.next() + " ");
        }
        System.out.println();

//        第三种：使用迭代器进行输出
        System.out.println("=====使用 Iterator 迭代器循环打印======");
        Iterator<Integer> it= list.iterator();
        while(it.hasNext()) {
            System.out.print(it.next() + " ");
        }
        System.out.println();
//        第一种：fori 循环进行打印
        System.out.println("=====fori循环打印======");
        for (int i = 0; i < list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
        System.out.println();

//        第二种：for each 循环进行打印
        System.out.println("=====for each 循环打印======");
        for (Integer x:list) {
            System.out.print(x + " ");
        }
        System.out.println();
    }
    public static void main2(String[] args) {
        ArrayList<Integer> list = new ArrayList<>(10);
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
//        System.out.println(list);//1 2 3  4 5

//        截取的方法的使用：
        List<Integer> list1 = list.subList(1,3);
//        System.out.println(list1);// 2,3

//        使用 set 方法，将list1的0下标改成 99，然后输出
        list1.set(0,99);
        System.out.println(list);
        System.out.println(list1);

/*        [1, 99, 3, 4, 5]
            [99, 3]
*/
/*        输出结果分析：
        1.实际上，通过subList方法截取顺序表list中的值，并没有开辟新的对象
        2.而是直接将 list 中，1下标的引用传给了 list1，所以list1的0下标，对应的就是 list 中的1下标
        3.通过 set 方法，改变 list1 0下标的值，实际上，也改变了 list 1下标的值，两者实际上 同根同源*/
    }
    public static void main1(String[] args) {
        ArrayList<Integer> list = new ArrayList<>(10);
        list.add(1);
        list.add(2);
        list.add(3);
        System.out.println(list);

        //初始化的时候，可以将整个顺序表当作初始化对象
        ArrayList<Integer> list1 = new ArrayList<>(list);
        list1.add(99);
        list1.add(1,100);
        System.out.println(list1);

        ArrayList<Integer> list2 = new ArrayList<>();
        list2.add(100);
        list2.add(200);
        list2.add(300);
//        add还可以直接添加整一个顺序表
        list2.addAll(list1);
        System.out.println(list2);
        list2.remove(1);
//        如果要移除一个具体的数字，需要new对象
//        list2.remove(new Integer(100));
    }
}
